package com.yomahub.liteflow.example.freemarker.controller;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.yomahub.liteflow.example.freemarker.dto.Product;
import com.yomahub.liteflow.example.freemarker.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Controller
@RequestMapping("freemarker")
public class EditorController {

    @Autowired
    private TemplateService templateService;
    @RequestMapping("freeMarkerEditor")
    public String editor(ModelMap modelMap) {
        return "freeMarkerEditor";
    }

    /**
     * 编辑器保存的是字符串，
     * 使用freemarker模板引擎，(模板采用freemarker文件夹下的test.ftlh)
     * 将dataModal数据填充到模板中
     * 返回完成文件
     *
     * @param data
     * @return
     */
    @RequestMapping(value = "text", method = RequestMethod.POST)
    @ResponseBody
    public String save(@Nullable @RequestBody String data) {
        Product product = new Product();
        product.setTemplateFileName("demo.html");
        product.setName("zjy");
        product.setUrl("www.baidu.com");
        HashMap<String, Object> map = new HashMap<>();
        map.put("user", "wwowowow");
        map.put("latestProduct", product);
        List<String> lists = new ArrayList<>();
        lists.add("aaa");
        lists.add("bbb");
        map.put("lists", lists);
        map.put("listStr", JSONObject.toJSONString(lists));
//        [a,b]
        map.put("listvar", StrUtil.format("[{},{}]", "a", "c"));
//        方案一
//        map.put("ABC_DEF", JSONObject.toJSONString(lists));
//        直接变量显示${lists}
//      方案二
//        String listStr = lists.toString();
//        直接变量显示${lists}
//        map.put("lists", listStr);
//     方案三: 显示json对象
//        List<Map<String, Object>> listMap = new ArrayList<>();
//        listMap.add(MapUtil.builder(new HashMap<String, Object>()).put("name", "zhao").put("age", 1).build());
////        String listMapStr = listMap.toString(); // list = [{name=zhao, age=1}]
//        String listMapStr = JSONObject.toJSONString(listMap); // list = [{"name":"zhao","age":1}]
//        map.put("listMap", listMapStr);
//        方案四：显示pojo
//        Product product1 = new Product();
//        product1.setName("abc");
//        product1.setUrl("http:baidu.com");
//        product1.setTemplateFileName("template");
////        map.put("pojo", product1);  // pojo = Product(templateFileName=template, url=http:baidu.com, name=abc)
//        map.put("pojo", JSONObject.toJSONString(product1)); // list = {"name":"abc","templateFileName":"template","url":"http:baidu.com"}
//        String strs = "'b'";
//        map.put("str", strs);
        String content = templateService.getTemplateContentFromString(data, map);
//      字符串模板创建指定文件，如果不存在新建，存在覆盖
//        FileUtil.writeUtf8String(content, "E:\\note\\freemarker-project\\src\\main\\java\\com\\yomahub\\liteflow\\example\\controller\\test.html");
        return content;
    }
}
